Start
  FunctionDecl
    Type
    Exp type: null IdDecl"A"(Line:1 Col:14)
    Opt
      Param
        List
          Decl
            Type
            Exp type: int IdDecl"a"(Line:1 Col:20)
            Opt
    ScopeBlock
      List
        FunctionDecl
          Type
          Exp type: null IdDecl"B"(Line:2 Col:22)
          Opt
            Param
              List
                Decl
                  Type
                  Exp type: int IdDecl"b"(Line:2 Col:28)
                  Opt
          ScopeBlock
            List
              DeclStmt
                Decl
                  Type
                  Exp type: int IdDecl"n"(Line:3 Col:21)
                  Opt
              Return
                Opt
                  Exp type: int IdUse"n"(Line:4 Col:24) -> "n"(Line:3 Col:21) -> type: int
        DeclStmt
          Decl
            Type
            Exp type: int IdDecl"c"(Line:6 Col:13)
            Opt
        Assign
          Exp type: int IdUse"c"(Line:7 Col:9) -> "c"(Line:6 Col:13) -> type: int
          Exp type: int FunctionCallExp
            Exp type: int IdUse"B"(Line:7 Col:13) -> 
            List
              Exp type: int IdUse"c"(Line:7 Col:15) -> "c"(Line:6 Col:13) -> type: int
        FunctionDecl
          Type
          Exp type: null IdDecl"C"(Line:9 Col:22)
          Opt
          ScopeBlock
            List
              Return
                Opt
                  Exp type: int FunctionCallExp
                    Exp type: int IdUse"A"(Line:10 Col:24) -> 
                    List
                      Exp type: int IdUse"a"(Line:10 Col:26) -> "a"(Line:1 Col:20) -> type: int
        FunctionCallStmt
          Exp type: int FunctionCallExp
            Exp type: int IdUse"C"(Line:13 Col:9) -> 
            List
        FunctionDecl
          Type
          Exp type: null IdDecl"A"(Line:15 Col:22)
          Opt
            Param
              List
                Decl
                  Type
                  Exp type: int IdDecl"b"(Line:15 Col:28)
                  Opt
                Decl
                  Type
                  Exp type: int IdDecl"d"(Line:15 Col:35)
                  Opt
          ScopeBlock
            List
              Return
                Opt
                  Exp type: int FunctionCallExp
                    Exp type: int IdUse"A"(Line:16 Col:17) -> 
                    List
                      Exp type: int IdUse"b"(Line:16 Col:19) -> "b"(Line:15 Col:28) -> type: int
        Return
          Opt
            Exp type: int FunctionCallExp
              Exp type: int IdUse"A"(Line:18 Col:16) -> 
              List
                Exp type: int IdUse"a"(Line:18 Col:18) -> "a"(Line:1 Col:20) -> type: int
                Exp type: int IdUse"c"(Line:18 Col:20) -> "c"(Line:6 Col:13) -> type: int
